home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / fdimg / oh!.2hd / OH!DEN_B.LZH / TOOLS / CDC / ZCDCSRC.LZH / ZCDC.S < prev   
Text File  |  1995-03-20  |  10KB  |  606 lines

  1.     *.include    tnb.mac
  2. DI        macro
  3.         ori.w        #$0700,sr
  4.         .endm
  5. EI        macro
  6.         andi.w        #$F8FF,sr
  7.         .endm
  8. SUPER        macro
  9.         moveq        #$81,d0
  10.         trap        #15
  11.         .endm
  12. USER        macro
  13.         moveq        #$81,d0
  14.         trap        #15
  15.         .endm
  16.  
  17.     .include    iocscall.mac
  18.     .include    doscall.mac
  19.     .include    CDC_.MAC
  20.  
  21. StartStatio:*******************常駐部
  22. SS:
  23.     jmp    init-SS(a4)
  24. head:
  25. HEAD1 = 'ZCDB'
  26. HEAD2 = 'GM01'
  27.     .dc.l    HEAD1
  28.     .dc.l    HEAD2
  29.     .even
  30. st:
  31. BITSNS:*=========================================
  32.     *    ($104)[$0410]
  33.     *    IOCS $04 BITSNS
  34.     *
  35.  
  36. BITSNS_ = $0410
  37. BITSNS_JMP:
  38.     jmp    $00000000.l
  39.  
  40.     .dc.l    'ZmuS'
  41.     .dc.l    'iCcD'
  42. TRP3:    *---------------------------
  43.     *    ($023)[$008C]
  44.     *    TRAP #3
  45.     *
  46. TRP3_    = $008C.w
  47.     tst.w    TRP_TR
  48.     bne    TRP3_JMP
  49.     move.l    d1,D1IN
  50.     cmpi.l    #$08,d1        *m_play
  51.     beq    TRP3_MP_SUB
  52.     cmpi.l    #$54,d1        *intercopt  d2.l==0 なら演奏
  53.     beq    TRP3_MP_SUB
  54.     cmpi.l    #$0A,d1        *m_stop
  55.     beq    TRP3_SUB
  56.     cmpi.l    #$0B,d1        *m_cont
  57.     beq    TRP3_SUB
  58.     cmpi.l    #$11,d1        *play_cnv_data
  59.     beq    TRP3_SUB
  60.     tst.l    _FADEMODE
  61.     beq    @f
  62.     cmpi.l    #$1A,d1        *fade_out
  63.     beq    TRP3_SUB
  64. @@:
  65.     bra    TRP3_JMP
  66. TRP3_SUB:
  67.     movem.l    d0-d7/a0-a6,-(sp)
  68.     bsr    CDCTRAP
  69.     movem.l    (sp)+,d0-d7/a0-a6
  70. TRP3_JMP:
  71.     jmp    $0.l
  72.  
  73. TRP3_MP_SUB:
  74.     movem.l    d0-d7/a0-a6,-(sp)
  75.     move.w    #1,TRP_TR
  76.      trap    #3        *2重トラップでノーマルの処理実行!!
  77.     clr.w    TRP_TR
  78.     move.l    D1IN(pc),d1
  79.     bsr    CDCTRAP
  80.     movem.l    (sp)+,d0-d7/a0-a6
  81.     rte
  82.  
  83. TRP_TR:    .dc.w    0    *0なら有効
  84. D1IN:    .dc.l    0    *d1記憶
  85.  
  86. OPMDRV:*-----------------------------
  87.     *    ($1F0)[$07C0]
  88.     *    IOCS $F0 OPMDRV
  89.     *
  90. OPMDRV_ = $07C0.w
  91.     move.l    d1,D1IN
  92.     cmpi.l    #$08,d1        *m_play
  93.     beq    OPM_MP_SUB
  94.     cmpi.l    #$54,d1        *intercopt  d2.l==0 なら演奏
  95.     beq    OPM_MP_SUB
  96.     cmpi.l    #$0A,d1        *m_stop
  97.     beq    OPM_SUB
  98.     cmpi.l    #$0B,d1        *m_cont
  99.     beq    OPM_SUB
  100.     cmpi.l    #$11,d1        *play_cnv_data
  101.     beq    OPM_SUB
  102.     tst.l    _FADEMODE
  103.     beq    @f
  104.     cmpi.l    #$1A,d1        *fade_out
  105.     beq    OPM_SUB
  106. @@:
  107.     bra    OPMDRV_JMP
  108. OPM_SUB:
  109.     movem.l    d0-d7/a0-a6,-(sp)
  110.     bsr    CDCTRAP
  111.     movem.l    (sp)+,d0-d7/a0-a6
  112. OPMDRV_JMP:
  113.     jmp    0.l
  114. OPM_MP_SUB:
  115.     movem.l    d0-d7/a0-a6,-(sp)
  116.     movea.l    OPMDRV_JMP+2(pc),a6
  117.     jsr    (a6)
  118.     move.l    D1IN(pc),d1
  119.     bsr    CDCTRAP
  120.     movem.l    (sp)+,d0-d7/a0-a6
  121.     rts
  122.  
  123.  
  124. CDCTRAP:*-----------------------------
  125.     CDC    _CDC_SCSI_CHK
  126.     tst.l    d0
  127.     beq    @f    *使用出来る
  128.     rts
  129. @@:
  130.     cmpi.l    #$08,d1        *m_play
  131.     beq    M_PLAY
  132.     cmpi.l    #$0A,d1        *m_stop
  133.     beq    M_STOP
  134.     cmpi.l    #$1A,d1        *fade_out
  135.     beq    M_STOP
  136.     cmpi.l    #$0B,d1        *m_cont
  137.     beq    M_CONT
  138.     cmpi.l    #$11,d1        *play_cnv_data
  139.     beq    PLAYCD
  140.     tst.l    d2
  141.     bne    @f
  142.     cmpi.l    #$54,d1        *intercopt  d2.l==0 なら演奏
  143.     beq    M_PLAY
  144. @@:    rts
  145. M_STOP:
  146.     CDC    _CDC_PAUSE
  147.     rts
  148. M_CONT:
  149.     CDC    _CDC_RESUME
  150.     rts
  151. PLAYCD:
  152.     addq.l    #1,a1    //VERSION NUMBER skip
  153.     bra    PlaySub
  154. M_PLAY:
  155.     moveq    #$45,d1
  156.     trap    #3
  157.     movea.l    (a0),a1
  158.     *bra    PlaySub
  159. PlaySub:
  160.     move.l    a1,-(sp)
  161.     bsr    _ZComDisp
  162.     addq    #4,sp
  163.     tst.l    d0
  164.     bmi    @f
  165.     beq    PlaySS
  166.     rts
  167. @@:
  168.     moveq    #$4e,d1    *タイトルチェック
  169.     trap    #3
  170.     move.l    a0,-(sp)
  171.     bsr    _ZTitDisp
  172.     addq    #4,sp
  173.     tst.l    d0
  174.     bmi    @f
  175.     beq    PlaySS
  176.     rts
  177. PlaySS:
  178.     CDC    _CDC_STOP
  179.     rts
  180.  
  181.     .include    ZCDC_.s
  182.  
  183.  
  184. _C_BGM:
  185.     movem.l    d3-d4,-(sp)
  186.     move.l     4+8(sp),d1
  187.     move.l     8+8(sp),d2
  188.     move.l    12+8(sp),d3
  189.     move.l    16+8(sp),d4
  190.     CDC    _CDC_BGM
  191.     movem.l    (sp)+,d3-d4
  192.     rts
  193. _C_PLAY:
  194.     move.l     4(sp),d1
  195.     move.l     8(sp),d2
  196.     CDC    _CDC_PLAY
  197.     rts
  198.  
  199. _C_TRACKS:
  200.     CDC    _CDC_TRACKS
  201.     rts
  202.  
  203. SetLoopTime:*-----------------------------
  204.     *    ZMUSIC $3b 用1
  205.     *
  206.     movem.l    d0-d3/a0-a1,-(sp)
  207.     CDC    _CDC_SCSI_CHK
  208.     tst.l    d0
  209.     bne    @f    *使用出来ない
  210.     CDC    _CDC_DRIVE
  211. @@:    moveq    #$3b,d1    *再設定
  212.     moveq    #1,d2
  213.     moveq    #1,d3
  214.     lea    SetLoopTime(pc),a1
  215.     trap    #3
  216.     movem.l    (sp)+,d0-d3/a0-a1
  217.     rts
  218.  
  219. *-------------------------------------
  220.  
  221. _FADEMODE:
  222.     .dc.l    0    *1;fade CD STOP
  223.  
  224. _CDC_LED_ST:
  225.     .dc.l    0    *常駐前のモード
  226. _CDC_POWER_ST:
  227.     .dc.l    0    *常駐前のモード
  228. ResultC:
  229.     .dc.l    0
  230.  
  231. EndStatio:*******************常駐部
  232.  
  233.  
  234. MarkerChk:*----------------------------------------
  235.     *    a0 アドレス
  236.     *
  237.     *[戻り値] bne ちがう
  238.     *      beq あっている
  239.     cmpa.l    #$00F00000,a0
  240.     bcc    @f
  241.     cmp.l    #HEAD1,(a0)
  242.     bne    @f
  243.     cmp.l    #HEAD2,4(a0)
  244.     bne    @f
  245.     cmpa.l    a0,a0        *z=1
  246. @@:
  247.     rts
  248.  
  249.  
  250. InvChk:*----------------------------------------
  251.     *    a0.l==なら非常駐
  252.     *    a0.l!=なら常駐
  253.     movea.l    (a0),a0            *一つ前のポインタ
  254.     cmpa.l    #$00F00000,a0
  255.     bcc    IC1
  256.     cmp.l    #HEAD1,$0104(a0)
  257.     bne    @f
  258.     cmp.l    #HEAD2,$0108(a0)
  259.     bne    @f
  260.     adda.w    #$100,a0    **[SS]のポインタ
  261.     rts
  262. @@:                    **違う
  263.     tst.l    (a0)            *一つ前のポインタ
  264.     bne    InvChk            *0でない(上へ)
  265. IC1:    sub.l    a0,a0    *非常駐
  266.     rts
  267.  
  268.  
  269. AtoI:*----------------------------------------
  270.     *    a2 アドレス
  271.     *[戻り値] d0.l 数字
  272.     moveq    #0,d0
  273. @@:    move.b    (a2)+,d2
  274.     subi.b    #'0',d2
  275.     bcs    AIr
  276.     cmpi.b    #9,d2
  277.     bhi    AIr
  278.     andi.l    #$0000FF,d2
  279.     mulu    #10,d0
  280.     add.l    d2,d0
  281.     bra    @b
  282. AIr:    subq    #1,a2
  283.     rts
  284.  
  285.  
  286. init:*------------------------------------------------------------------
  287.     lea    usrsp,sp
  288.     ** 常駐チェック **
  289.     suba.l    a1,a1
  290.     SUPER
  291.     movea.l    d0,a1
  292.     moveq    #0,d1
  293.     bsr    InvChk
  294.     movea.l    a0,a3        *常駐先頭アドレス
  295.  
  296.     movea.l    BITSNS_,a0
  297.     suba    #BITSNS-head,a0
  298.     bsr    MarkerChk
  299.     bne    @f
  300.     bset    #0,d1
  301. @@:
  302.     movea.l    TRP3_,a0
  303.     suba    #TRP3-head,a0
  304.     bsr    MarkerChk
  305.     bne    @f
  306.     bset    #1,d1
  307. @@:
  308.     movea.l    OPMDRV_,a0
  309.     suba    #OPMDRV-head,a0
  310.     bsr    MarkerChk
  311.     bne    @f
  312.     bset    #2,d1
  313. @@:
  314.                 *d1に常駐状態
  315.     USER
  316.  
  317.     ** 常駐していたらそのデータを引用 **
  318.     move.l    a3,d0
  319.     beq    conl
  320.     move.l    _CDC_LED_ST-SS(a3),_CDC_LED_ST
  321.     move.l    _CDC_POWER_ST-SS(a3),_CDC_POWER_ST
  322.     move.l    ResultC-SS(a3),ResultC
  323.  
  324. conl:    ** コマンドラインチェック **
  325.     tst.b    (a2)+        *スキップ
  326. sw:    move.b    (a2)+,d0
  327.     beq    keep
  328.     cmpi.b    #' ',d0
  329.     beq    sw
  330.     cmpi.b    #$09,d0        *tab
  331.     beq    sw
  332.     cmpi.b    #'-',d0
  333.     beq    swc
  334.     cmpi.b    #'/',d0
  335.     beq    swc
  336. swe:
  337.     tst.w    titsw    *0;表示 1;非表示
  338.     bne    @f
  339.     pea    LR1(pc)
  340.     DOS    _PRINT
  341.     addq.w    #4,sp
  342. @@:    pea    LR6(pc)
  343.     bra    PE    *end
  344. swc:    **スイッチ判断
  345.     move.b    (a2)+,d0
  346.     beq    swe
  347.     cmpi.b    #'?',d0
  348.     beq    help
  349.     ori.b    #$20,d0    *小文字化!
  350.     cmpi.b    #'t',d0
  351.     beq    tswc
  352.     cmpi.b    #'r',d0
  353.     beq    free
  354.     cmpi.b    #'h',d0
  355.     beq    help
  356.     cmpi.b    #'n',d0
  357.     beq    nswc
  358. swcerr:    tst.w    titsw    *0;表示 1;非表示
  359.     bne    @f
  360.     pea    LR1(pc)
  361.     DOS    _PRINT
  362.     addq.w    #4,sp
  363. @@:    pea    LR7(pc)
  364.     bra    PE    *end
  365.  
  366. nswc:*******************
  367.     move.w    #1,titsw    *0;表示 1;非表示
  368.     bra    sw
  369. help:******************
  370.     tst.w    titsw    *0;表示 1;非表示
  371.     bne    @f
  372.     pea    LR1(pc)
  373.     DOS    _PRINT
  374.     addq.w    #4,sp
  375. @@:    pea    LRH(pc)
  376.     bra    PE    *end
  377.  
  378. CHK_T:    .dc.w    0
  379. tswc:    ************************** 常駐させる
  380.     move.w    #-1,CHK_T
  381. keep:    ************************** 常駐させる
  382.     tst.w    titsw    *0;表示 1;非表示
  383.     bne    @f
  384.     pea    LR1(pc)
  385.     DOS    _PRINT
  386.     addq.w    #4,sp
  387. @@:    move.l    a3,d0
  388.     beq    @f
  389.         *既に常駐、設定変更
  390.  
  391.     *move.w    Port(pc),Port-SS(a3)
  392.     *move.w    MfMod(pc),MfMod-SS(a3)
  393.     pea    LR5(pc)
  394.     bra    PE    *end
  395. @@:
  396.     _CDC_CHK_
  397.     bne    @f
  398.     pea    LRNCD(pc)
  399.     bra    PE    *end
  400. @@:
  401.     CDC    _CDC_VERSION
  402.     cmpi.l    #$0101,d0
  403.     bcc    @f
  404.     pea    LRNCD(pc)
  405.     bra    PE    *end
  406. @@:
  407.     bsr    _Zm_drvchk
  408.     tst.l    d0
  409.     bne    @f
  410.     pea    LRNZM(pc)
  411.     bra    PE    *end
  412. @@:
  413.     **セット
  414.     suba.l    a1,a1
  415.     SUPER
  416.     movea.l    d0,a1
  417.  
  418.     move.l    BITSNS_,BITSNS_JMP+2
  419.      lea    BITSNS-SS(a4),a0
  420.      move.l    a0,BITSNS_
  421.     move.l    TRP3_,TRP3_JMP+2
  422.      lea    TRP3-SS(a4),a0
  423.      move.l    a0,TRP3_
  424.     move.l    OPMDRV_,OPMDRV_JMP+2
  425.      lea    OPMDRV-SS(a4),a0
  426.      move.l    a0,OPMDRV_
  427.  
  428.     USER
  429.  
  430.     *Z func
  431.     moveq    #$3b,d1
  432.     moveq    #1,d2
  433.     moveq    #1,d3
  434.     lea    SetLoopTime(pc),a1
  435.     trap    #3
  436.  
  437.     moveq    #$40,d1
  438.     lea    ZCDC(pc),a1
  439.     trap    #3
  440.     move.l    d0,ResultC
  441.  
  442.     moveq    #0,d1
  443.     CDC    _CDC_KEYMODE
  444.  
  445.     moveq    #1,d1
  446.     CDC    _CDC_LED
  447.     move.l    d0,_CDC_LED_ST
  448.  
  449.     *moveq    #0,d1
  450.     *CDC    _CDC_POWER
  451.     *move.l    d0,_CDC_POWER_ST
  452.  
  453.     tst.w    CHK_T
  454.     bne    @f
  455.     moveq    #1,d1
  456.     CDC    _CDC_TRACKMODE
  457. @@:
  458.     tst.w    titsw    *0;表示 1;非表示
  459.     bne    @f
  460.     pea    LRKP(pc)
  461.     DOS    _PRINT
  462.     addq    #4,sp
  463. @@:    clr.w    -(sp)
  464.     move.l    #EndStatio-StartStatio,-(sp)
  465.     DOS    _KEEPPR
  466.  
  467. *ZCDC:    .dc.b    'ZCDC -n -r',0
  468. ZCDC:    .dc.b    'ZCDC -r',0
  469.     .even
  470.  
  471. free:    *****************************常駐解除
  472.     tst.w    titsw    *0;表示 1;非表示
  473.     bne    @f
  474.     pea    LR1(pc)
  475.     DOS    _PRINT
  476.     addq.w    #4,sp
  477. @@:    move.l    a3,d0
  478.     bne    @f
  479.     pea    LR8(pc)        **非常駐
  480.     bra    PE    *end
  481.  
  482. @@:    cmpi.w    #$07,d1
  483.     beq    @f
  484.     pea    LR4(pc)        **ベクタが占領
  485.     bra    PE    *end
  486.  
  487. @@:
  488.     *Z func
  489.     moveq    #$3b,d1
  490.     moveq    #0,d2
  491.     moveq    #1,d3
  492.     suba.l    a1,a1
  493.     trap    #3
  494.  
  495.     suba.l    a1,a1
  496.     SUPER
  497.     movea.l    d0,a1
  498.  
  499.     move.l    (BITSNS_JMP-SS)+2(a3),BITSNS_
  500.     move.l    (TRP3_JMP-SS)+2(a3),TRP3_
  501.     move.l    (OPMDRV_JMP-SS)+2(a3),OPMDRV_
  502.  
  503.     USER
  504.  
  505.     move.l    ResultC(pc),d2
  506.     bmi    @f
  507.     moveq    #$40,d1
  508.     suba.l    a1,a1
  509.     trap    #3
  510. @@:
  511.     moveq    #1,d1
  512.     CDC    _CDC_KEYMODE
  513.  
  514.     moveq    #0,d1
  515.     CDC    _CDC_MODE
  516.  
  517.     move.l    _CDC_LED_ST(pc),d1
  518.     CDC    _CDC_LED
  519.  
  520.     *move.l    _CDC_POWER_ST(pc),d1
  521.     *CDC    _CDC_POWER
  522.  
  523.     moveq    #0,d1
  524.     CDC    _CDC_TRACKMODE
  525.  
  526.     sub.l    #$00000F0,a3
  527.     move.l    a3,-(sp)
  528.     DOS    _MFREE
  529.     addq    #4,sp
  530.  
  531.     pea    LR3(pc)
  532. PE:    tst.w    titsw    *0;表示 1;非表示
  533.     bne    @f
  534.     DOS    _PRINT
  535. @@:    addq.w    #4,sp
  536.     DOS    _EXIT
  537.  
  538. *(trap #3のベクタのアドレス-8 から文字列 "ZmuSiC" があれば zmusic system常駐と判断)
  539. *    戻り値:常駐してる   ... 0以外
  540. *        常駐してない ... 0
  541. *                DSHELL3 ソースより
  542.     .globl        _Zm_drvchk
  543. _Zm_drvchk:
  544.     lea.l        $80+3*4,a1
  545.     IOCS        _B_LPEEK
  546.     subq.l        #8,d0
  547.     move.l        #$ff000000,d1
  548.     and.l        d0,d1
  549.     bne        nn
  550.  
  551.     movea.l        d0,a1
  552.     lea        buf,a2
  553.     movea.l        a2,a0
  554.     moveq        #5,d1
  555.     IOCS        _B_MEMSTR
  556.     lea        zmark,a1
  557.     moveq        #5,d0        * loop回数( 'ZmuSiC' の長さ-1 )
  558. @@:    cmpm.b        (a0)+,(a1)+
  559.     bne        nn
  560.     dbra        d0,@b
  561. *    moveq        #1,d0
  562.     rts
  563.  
  564. nn:    moveq        #0,d0
  565.     rts
  566.  
  567. zmark:    .dc.b        'ZmuSiC'
  568.     .even
  569. buf:    ds.b        8
  570.  
  571.  
  572. titsw:    .dc.w    0    *0;表示 1;非表示
  573.  
  574. LRKP:    .dc.b    ' 常駐しました。',$0d,$0a,0
  575.     .even
  576. LR3:    dc.b    ' 常駐解除しました。',$0d,$0a,0
  577.     .even
  578. LR4:    dc.b    ' ベクタが占領されています。',$0d,$0a,0
  579.     .even
  580. LR5:    .dc.b    ' 既に常駐しています。',$0d,$0a,0
  581.     .even
  582. LR6:    .dc.b    ' コマンドラインが異常です。',$0d,$0a,0
  583.     .even
  584. LR7:    .dc.b    ' スイッチが異常です。',$0d,$0a,0
  585.     .even
  586. LR8:    .dc.b    ' 常駐していません。',$0d,$0a,0
  587.     .even
  588. LRNCD:    .dc.b    ' CDC.x が常駐していません。常駐出来ません。',$0d,$0a,0
  589.     .even
  590. LRNZM:    .dc.b    ' ZMUSICが常駐していません。常駐出来ません。',$0d,$0a,0
  591.     .even
  592. LRH:
  593.     .dc.b    $0d,$0a
  594.     .dc.b    '使用法:ZCDC.x [switch]',$0d,$0a
  595.     .dc.b    '    無し ・・ 常駐します。拡張トラックを解除します。',$0d,$0a
  596.     .dc.b    '    /T ・・・・ 常駐します。拡張トラックを解除しません。',$0d,$0a
  597.     .dc.b    '    /R ・・・・ 常駐解除します。',$0d,$0a
  598.     *.dc.b    '    /N ・・・・ 表示を出しません。',$0d,$0a
  599.     .dc.b    $0d,$0a,0
  600.     .even
  601. LR1:    dc.b    'ZMUSIC CD CONTROLER with CDC.x Version 0.20 Copyright 1994 TNB製作所',$0d,$0a,0
  602.     .even
  603.  
  604.     .ds.b    2048
  605. usrsp:
  606.